<?php
require_once 'xmlToArray.class.php';

/**
 * Clase de utilidades para el desarrollador
 * @author Mauro Gadaleta
 */
class utils {

    /**
     * imprime por pantalla un array
     * @static
     * @param  $array
     * @return void
     */
	static public function myprint_r($array) {
		echo '<pre>';
		print_r($array);
		echo '</pre>';
	}

    /**
     * convierte un xml en un array
     * @static
     * @param  $xml
     * @return Array
     */
	static public function XMLToArray($xml) {
		$xmlObj = new XmlToArray($xml);
		return $arrayData = $xmlObj->createArray();
	}

    /**
     * convierte un array en una URL
     * @static
     * @param  $array
     * @return null|string
     */
	static public function arrayToURL($array) {
		$string = null;
		foreach ($array as $key => $value) {
			if(is_null($string)) {
				$string = "?$key=$value";
			}
			else
			{
				$string .= "&$key=$value";
			}
		}
		return $string;
	}

    /**
     * Redirecciona la aplicación fuera o dentro de la propia aplicación
     * @static
     * @param  $url
     * @param bool $web
     * @param bool $admin
     * @return void
     */
	static public function redirect($url,$web=true,$admin=false) {
		if($web)
		{
			if(!$admin)
				header('Location:'.__WEB_ROOT.$url);
			else
				header('Location:'.__WEB_ROOT.'admin/'.$url);
		}
		else
			header('Location:'.$url);
	}

    /**
     * Push dentro de un array
     * @static
     * @param  $var
     * @param  $array
     * @return array
     */
	static public function myPush($var,$array) {
		foreach($array as $key => $element)
		{
			array_push($var,$element);
		}
		
		return $var;
	}

    /**
     * Lee un directorio y devuelve una lista de archivos
     * @static
     * @param  $dir
     * @param int $rDir
     * @return bool
     */
	static public function read_dir($dir, $rDir = 0) {
		if(!is_dir($dir))
			return false;
			
		$cDir = dir($dir);
		$dirname = utils::dir_name($dir);
		$aDir[$dirname] = array();
		while(false !== ($file = $cDir->read()))
		{
			if(($file != ".") && ($file != "..") && ($file != ".svn"))
			{
				$isDir = is_dir($dir."/".$file);
				if(($isDir) && ($rDir==2))
				{
                    $aDir[$dirname] = array_merge($aDir[$dirname],utils::read_dir($dir."/".$file, $rDir));
				} elseif($isDir && $rDir>0)
				{
					$aDir[$dirname][$file] = array();
				} elseif(!$isDir)
				{
					$aDir[$dirname][] = $file;
				}
			}
		}
		$cDir->close();
		return $aDir;
	}

    /**
     * @static
     * @param  $dir
     * @return string
     */
	static private function dir_name($dir) {
		$dir = realpath($dir);
		$pos = strrpos($dir, "\\");
		if($pos === false)
			$pos = strrpos($dir, "/");
			
		$dir = substr($dir, $pos+1,strlen($dir)-$pos);
		return $dir;
	}

    /**
     * Genera un token de una cierta mida
     * @static
     * @param int $length
     * @return string
     */
    static public function generateToken($length = 25) {
        $characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
        $string = "";
        for ($p = 0; $p < $length; $p++) {
            $string .= $characters[mt_rand(0, strlen($characters))];
        }
        return $string;
    }

    /**
     * Guarda un fichero de un formulario en una carpeta media del server
     * @static
     * @param array $file
     * @param string $folder
     * @return bool
     */
    static public function moveUploadedFile( $file , $mediaFolder = '' ) {
        if($file['error']==UPLOAD_ERR_OK)
        {
            if(is_dir('media/'.$mediaFolder))
                $path = 'media/'.$mediaFolder;
            elseif(is_dir('../media/'.$mediaFolder))
                $path  = '../media/'.$mediaFolder;

            if(isset($path))
            {
                $path .= './'.$file['name'];
                if(move_uploaded_file($file['tmp_name'],$path))
                    return true;
                else
                    return false;
            }
            else
                return false;
        }
        else
            return false;
    }

    /**
     * genera un password aleatorio
     * @static
     * @param int $length
     * @return string
     */
    static public function generatePassword( $length ) {
        $chars = "012346789abcdfghjkmnpqrtvwxyzABCDFGHJKLMNPQRTVWXYZ";
        srand((double)microtime()*1000000);
        $i = 0;
        $pass = '';
        while ($i <= $length)
        {
            $num = rand() % 33;
            $tmp = substr($chars,$num,1);
            $pass = $pass . $tmp;
            $i++;
        }

        return $pass;
    }

    /**
     * Setea a null un campo vacio de un array
     * @static
     * @param array $array
     * @return array
     */
    static public function setNullEmptyFieldArray( $array = array() ) {

        foreach($array as $field => $value)
        {
            if(!is_array($value))
            {
                if($value=='')
                    unset($array[$field]);
            }
            else
            {
                if(empty($value))
                    unset($array[$field]);
                $array[$field] = utils::setNullEmptyFieldArray($array[$field]);
            }
        }

        return $array;
    }
}

?>